我是如何与pip分手并爱上诗我的新女友的。

您所在的位置:网站首页 pip install 依赖冲突 我是如何与pip分手并爱上诗我的新女友的。

我是如何与pip分手并爱上诗我的新女友的。

2023-03-25 15:10| 来源: 网络整理| 查看: 265

我最近偶然发现了诗歌新的python依赖管理,并决定试一试。

在我发现诗歌之前,我一直是 pip 的死忠粉,并且在我的大部分项目中都使用过它。此外,我过去听说过 pyenv,但出于偏好原因不愿意在我的项目中使用它。由于 Python 依赖管理是一个有趣的话题,我想在另一篇文章中解释不同之处,例如pipvspyenvvspetry。

当我发现诗歌并对其进行测试时,我爱上了它。

什么是诗?

虽然我会在这篇文章中谈论女朋友、坠入爱河和分手,但我谈论的诗歌不是关于爱情、散文、诗歌或莎士比亚的。

Poetry 是 Python 中依赖管理和打包的工具。它允许您声明项目所依赖的库,它会为您管理(安装/更新)它们。 它支持 Python 2.7 和 3.5+

如果您使用python并安装软件包,您应该熟悉pip我的老女朋友。

为什么要用诗歌代替点子?

[图像描述](https://res.cloudinary.com/practicaldev/image/fetch/s--aOWpN-0h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/hsc472csl1450be5tqvb.jpeg)

经过两周的使用和五个个人项目从pip到poetry的成功迁移,我可以选择诗歌,因为:

它有一个很好的依赖解析器。它比 PIP 做得更好。阅读有趣的文章www.activestate.com。作者明确表示

不幸的是,pip 没有尝试解决依赖冲突。例如,如果您安装了两个包,包 A 可能需要与包 B 不同的依赖项版本。

我发现的另一个优点是,每当您向项目诗歌更新中添加新的依赖项时,pyproject.toml以及新的顶级依赖项都会避免您执行pip freeze来为您的项目生成新的需求文件。

您可以使用相同的工具来构建和发布您的包。这样做很容易。我认为这就是为什么我认为poetry胜过pip

一方面,我认为poetry在很多方面都胜过pip。另一方面,我在steroids上将其视为pip

在以下部分中,我将指导您如何将现有项目从 pip 迁移到诗歌。

在您的系统中安装 Poetry

[](https://res.cloudinary.com/practicaldev/image/fetch/s--wzwGfpeC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh5.googleusercontent.com/ prDFZYFCdhOvTIpSpv8fItqiZ3GHrHEypuEhY0J2IyORNHoOwd6JlneUEGlcE-yRR0xVGkOUlwIeDWc5DfSCMrpJqX5m_CQxcERZ2fUzLmmOeV-dF-OYUbMAAg0t0uvxhAN-o%3Ds0)

安装诗歌非常简单,如果您安装了 python 和curl,您可以通过运行轻松安装它:

osx/linux/bashonwindows安装说明 curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -

进入全屏模式 退出全屏模式

windows powershell安装说明 (Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py -UseBasicParsing).Content | python -

进入全屏模式 退出全屏模式

警告:以前的get-poetry.py安装程序现已弃用,如果您当前正在使用它,您应该迁移到新的、受支持的install-poetry.py安装程序。

安装程序将poetry工具安装到 Poetry 的bin目录。此位置取决于您的系统:

$HOME/.local/bin用于 Unix

%APPDATA%\Python\Scripts在 Windows 上

如果这个目录不在你的PATH上,如果你想用简单的poetry调用诗歌,你需要手动添加它。

或者,您可以使用poetry的完整路径来使用它。

还有另外一个版本用pip安装但是为什么要用你的前任来吸引你的新女友呢? 🤔🤪

安装完所有内容后,您可以重新启动终端并运行以下命令来检查诗歌版本:

poetry --version

如果安装不成功或遇到不兼容问题。请前往Github Poetry获取帮助、了解更多信息或提出问题。

迁移

[](https://res.cloudinary.com/practicaldev/image/fetch/s--KOngp9VK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://lh4.googleusercontent.com/ S09PZBBBn_Q9Vx8vpxLNP67_9HmU-JEM50KpnZZaZavhqS3y2tzfDFuvHlL59CJo_UKhtRtYyWofhx5zlUtvUbk3yO5HHsMM4rqs6xH0fCKaGWZsjlBX7T3j_R0WdPjvf1gG3U0%3Ds0)

生成顶层依赖

在进行下一步之前,您需要确保可以为项目生成顶级依赖项,为此您需要一个名为pipdeptree的包。对于上下文,顶级依赖项是依赖项树的根。什么是依赖树?您使用pip安装的每个软件包都有依赖它的其他依赖项。在安装新包之前,它会安装他的顶级依赖项。例如,pandas 是一个包,但pandas依赖于numpy,如果您安装 pandas,它还会安装 numpy 作为依赖项。

以下命令将仅生成顶级依赖项,因此如果您安装了 pandas,它只会生成 pandas 而不是 numpy 作为要求。

为什么这很重要? :

这个应该填

pipdeptree --warn silence | grep -E '^\w+' > requirements-new.txt

生成顶级依赖项后,我建议您停用虚拟环境并将其删除以完成分解,然后再进行下一步。

将诗歌添加到现有项目。

如果你有一个使用pip的新项目并且里面有requirements.txt文件,你可以运行以下命令来初始化项目中的诗歌。

poetry init

这将提示您为现有项目设置诗歌,并要求您提供有关项目的一些详细信息,例如项目名称、要使用的 python 版本和描述。因此,它将生成pyproject.toml文件,该文件将包含有关您的项目的所有详细信息以及顶级项目要求及其版本。

创建虚拟环境

Poetry 默认在名为~/Library/Application Support/pypoetry的文件夹中创建虚拟环境,但您可以使用以下命令更改这些设置:

poetry config virtualenvs.in-project true

运行该命令后,您可以运行以下命令:

poetry shell

如果项目没有虚拟环境,它将激活项目的虚拟环境并创建一个新环境。

安装项目的需求。

如果您有在第一步运行的命令生成的requirements-news.txt文件,则可以通过运行以下命令来安装其中的所有包及其对应版本:

for item in $(sed -n 's/==/@/p' requirements-new.txt); do poetry add "${item}" ; done

这仅适用于 Linux 和 Mac,仍在尝试找到适用于 Windows 的确切版本。

该命令有什么作用?我遍历requirement-new.txt文件的每一行获取依赖项,只需将依赖项中的==替换为@,然后将其添加为诗歌。

例如,如果在文件中有 pandasu003du003d1.1.1,它将安装以下带有诗歌poetry add [email protected]

如果一切顺利,您应该安装所有顶级软件包及其依赖项。

一旦命令成功运行并且你已经安装了所有东西,你应该检查你的pyproject.toml文件是否包含所有包及其顶级依赖项。

您现在可以通过运行删除旧的requirements.txt文件和新创建的requirement-new.txt文件。

rm -f requirements.*

关于在conda环境下使用诗歌的部分

有些人喜欢有多个女朋友,可能喜欢保留他们以前的 conda 或 pip 环境。这个方法我还没试过,但是根据这个issue可以在python环境下使用poetry安装包。

您只需将诗歌配置为不在项目中创建虚拟环境并将包安装在 conda 或 pip 环境中。

我认为您可以尝试一下,并在评论中告诉我们进展如何。

奖励,Dockerfile。

如果你有一个 dockerfile,你可以编辑它并使用以下使用多阶段构建的 docker 图像来安装你所有的诗歌要求。

FROM python:3.7.5 AS base LABEL maintainer="Espoir Murhabazi < first_name.second_name[:3] on gmail.com>" ENV PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ PIP_NO_CACHE_DIR=off \ PIP_DISABLE_PIP_VERSION_CHECK=on \ PIP_DEFAULT_TIMEOUT=100 \ POETRY_HOME="/opt/poetry" \ POETRY_VIRTUALENVS_IN_PROJECT=true \ POETRY_NO_INTERACTION=1 \ PYSETUP_PATH="/opt/pysetup" \ VENV_PATH="/opt/pysetup/.venv" ENV PATH="$POETRY_HOME/bin:$VENV_PATH/bin:$PATH" FROM base AS python-deps RUN apt-get update \ && apt-get install --no-install-recommends -y \ curl \ build-essential # Install Poetry - respects $POETRY_VERSION & $POETRY_HOME ENV POETRY_VERSION=1.1.7 RUN curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python WORKDIR $PYSETUP_PATH COPY ./poetry.lock ./pyproject.toml ./ RUN poetry install --no-dev FROM base AS runtime COPY --from=python-deps $POETRY_HOME $POETRY_HOME COPY --from=python-deps $PYSETUP_PATH $PYSETUP_PATH RUN useradd -ms /bin/bash espy COPY . /home/espy WORKDIR /home/espy USER espy CMD [" you command "]

进入全屏模式 退出全屏模式

基本上,docker 文件的作用是,它使用多阶段构建来首先安装第一步中的包,然后仅复制第二步中安装的包以及项目存储库。多阶段构建的优点之一是它只使用项目所需的必要文件,因此减少了 docker 容器的内存。

您可以使用以下教程了解有关多阶段构建的更多信息。

结论

我的分手故事也告一段落。你可能知道,所有的分离都不是一帆风顺的,有时你的旧女友的守护进程会来并开始给你的新关系带来麻烦。因此,如果您在分手期间发现任何问题,请随时在评论中告诉我,我会尽力帮助您🤔。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3